gtkmain: Ignore GDK_CROSSING_GRAB/UNGRAB crossing events for picking purposes
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 4 May 2017 11:45:30 +0000 (13:45 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 25 May 2017 14:25:59 +0000 (16:25 +0200)
Especially with owner_events=TRUE, this doesn't mean anything for picking, as
events will be reported as usual inside the application.

gtk/gtkmain.c

index cc9e2387165b8775d81c8c4afc380737d35fe933..ca68a45bd8b5b1fdf3a0f71ab3b8cfce1cf29286 100644 (file)
@@ -1475,14 +1475,20 @@ handle_pointing_event (GdkEvent *event)
   switch (event->type)
     {
     case GDK_LEAVE_NOTIFY:
+      if (event->crossing.mode == GDK_CROSSING_GRAB ||
+          event->crossing.mode == GDK_CROSSING_UNGRAB)
+        break;
     case GDK_TOUCH_END:
     case GDK_TOUCH_CANCEL:
       old_target = update_pointer_focus_state (toplevel, event, NULL);
       break;
+    case GDK_ENTER_NOTIFY:
+      if (event->crossing.mode == GDK_CROSSING_GRAB ||
+          event->crossing.mode == GDK_CROSSING_UNGRAB)
+        break;
     case GDK_TOUCH_BEGIN:
     case GDK_TOUCH_UPDATE:
     case GDK_MOTION_NOTIFY:
-    case GDK_ENTER_NOTIFY:
       target = _gtk_toplevel_pick (toplevel, x, y, NULL, NULL);
       old_target = update_pointer_focus_state (toplevel, event, target);
       if (event->type == GDK_MOTION_NOTIFY || event->type == GDK_ENTER_NOTIFY)